 #include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <Stdbool.h>


 struct TreeNode {
      int val;
      struct TreeNode *left;
      struct TreeNode *right;
  };

  bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if(p==NULL&&q==NULL)
        return true;
    if(p==NULL&&q!=NULL)
        return false;
    if(q==NULL&&p!=NULL)
        return false;
    if(q->val!=p->val)
        return false;
    return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {
    if(root==NULL&&subRoot==NULL)
        return true;
    if(root==NULL&&subRoot!=NULL)
        return false;
    if(isSameTree(root,subRoot))
        return true;
    return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}